import java.util.Arrays;
import java.util.Scanner;

public class Test {
    //计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。
    public static double func1() {
        double sum = 0;
        int flg = 1;
        for (int i = 1; i <= 100; i++) {
            sum = sum + 1.0 / i * flg;
            flg = -flg;
        }
        return sum;
    }

    public static void main1(String[] args) {
        double d = func1();
        System.out.println(d);
    }

    //输出一个整数的每一位，如：123的每一位是3，2，1
    public static void func2(int n) {
        while (n != 0) {
            System.out.println(n % 10);
            n /= 10;
        }
    }

    public static void main2(String[] args) {
        func2(123);
    }

    //编写代码模拟三次密码输入的场景。 最多能输入三次密码，密码正确，提示“登录成功”,密码错误， 可以重新输 入，最多输入三次。三次均错，则提示退出程序
    public static void login() {
        int count = 3;
        Scanner input = new Scanner(System.in);
        while (count != 0) {
            System.out.print("请输入你的密码：");
            String passWord = input.nextLine();
            if (passWord.equals("123456")) {
                System.out.println("登陆成功！");
                break;
            } else {
                count--;
                System.out.println("你还有" + count + "次机会！");
            }
        }
        if (count == 0) {
            System.out.println("退出程序");
        }
    }

    public static void main3(String[] args) {
        login();
    }

    //创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3。
    //要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算
    public static int max(int a, int b) {
        return a > b ? a : b;
    }

    public static int max(int a, int b, int c) {
        int tmp = max(a, b);
        return max(tmp, c);
    }

    public static void main4(String[] args) {
        System.out.println(max(1, 2, 3));
    }

    //求斐波那契数列的第n项。(迭代实现)
    public static int fib(int n) {
        if (n == 1 || n == 2) {
            return 1;
        }
        int f1 = 1;
        int f2 = 1;
        int f3 = 0;
        for (int i = 3; i <= n; i++) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }

    public static void main5(String[] args) {
        System.out.println(fib(1));
        System.out.println(fib(2));
        System.out.println(fib(3));
        System.out.println(fib(40));
    }
    public static int fac(int n) {
        if(n == 1) {
            return 1;
        }
        int tmp = n * fac(n-1);
        return tmp;
    }

    public static void main6(String[] args) {
        System.out.println(fac(5));
    }
    // 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4)
    public static void func4(int n) {
        if(n <= 9) {
            System.out.println(n);
            return;
        }
        func4(n/10);
        System.out.println(n%10);
    }
    public static void main7(String[] args) {
        func4(1234);
    }
    //递归求 1 + 2 + 3 + ... + 10
    public static int sum(int n) {
        if(n == 1) {
            return 1;
        }
        return n + sum(n-1);
    }

    public static void main8(String[] args) {
        System.out.println(sum(10));
    }
    //写一个递归方法，输入一个非负整数，返回组成它的数字之和. 例如，输入 1729, 则应该返回
    //1+7+2+9，它的和是19
    public static int func5(int n) {
        if(n <=9 ) {
            return n;
        }
        return n % 10 + func5(n/10);
    }

    public static void main9(String[] args) {
        System.out.println(func5(1729));
    }
    //求斐波那契数列的第 N 项
    public static int fib1(int n) {
        if(n == 1 || n == 2) {
            return 1;
        }
        return fib1(n-1) + fib(n-2);
    }

    public static void main10(String[] args) {

        System.out.println(fib1(1));
        System.out.println(fib1(2));
        System.out.println(fib1(3));
        System.out.println(fib1(4));

    }

    /**
     *
     * @param n
     * @param pos1  起始位数
     * @param pos2  中转位置
     * @param pos3  目的位置
     */
    public static void hanota(int n, char pos1, char pos2, char pos3) {
        if(n == 1) {
            move(pos1,pos3);
            return;
        }
        hanota(n-1,pos1,pos3,pos2);
        move(pos1,pos3);
        hanota(n-1,pos2,pos1,pos3);
    }
    public static void move(char pos1,char pos2) {
        System.out.print(pos1+"->"+pos2+" ");
    }
    public static void main11(String[] args) {
        hanota(1,'A','B','C');
        System.out.println();
        hanota(2,'A','B','C');
        System.out.println();
        hanota(3,'A','B','C');
        System.out.println();
    }

    public static void main12(String[] args) {
        int[] array = {1,2,3,4,5};
        array[0] = 99;
        System.out.println(array[0]);
        System.out.println(array[1]);
        System.out.println(array.length);//数组名.length就可以自动求出长度;
    }

    public static void main13(String[] args) {
        int[] array = {1,2,31,14,52,6};
        System.out.println(array);

        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        System.out.println("---------");
        for(int z : array) {
            System.out.println(z);
        }
        System.out.println("---------");
        Arrays.sort(array);
        System.out.println(Arrays.toString(array));
        String ret = Arrays.toString(array);
        System.out.println(ret);

        }
    //递归求 N 的阶乘
    public static int fac10(int n) {
        if(n == 1) {
            return 1;
        }
        return n * fac10(n-1);
    }

    public static void main14(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println(fac10(n));
    }
    //递归求 1 + 2 + 3 + ... + 10
    public static int fac11(int n) {
        if(n == 1) {
            return 1;
        }
        return n + fac11(n-1);
    }

    public static void main15(String[] args) {
        System.out.println(fac11(10));
    }
    //按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) （递归）
    public static void fac12(int n) {
        if(n <= 9) {
            System.out.print(n+" ");
            return;
        }
        fac12(n/10);
        System.out.print(n % 10 +" ");
    }

    public static void main16(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        fac12(n);
    }
    //写一个递归方法，输入一个非负整数，返回组成它的数字之和
    public static int fac13(int n) {
        if(n <= 9) {
            return n;
        }
        return n % 10 + fac13(n/10);
    }

    public static void main17(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int ret = fac13(n);
        System.out.println(ret);
    }
    //递归求斐波那契数列的第 N 项
    public static int fac14(int n) {
        if(n == 1) {
            return 1;
        }
        if(n == 2) {
            return 1;
        }
        return fac14(n-1) + fac14(n-2);
    }
    public static void main20(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        System.out.println(fac14(n));
    }
    //创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100
    public static void main21(String[] args) {
        int[] array = new int[100];
        for (int i = 0; i < 100; i++) {
            array[i] = i+1;
        }
        for (int i = 0; i < 100; i++) {
            System.out.print(array[i] + " ");
        }
    }
    //实现一个方法 printArray, 以数组为参数, 循环访问数组中的每个元素, 打印每个元素的值.
    public static void printArray(int[] array) {
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i]+" ");
        }
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7,8,9,10};
        printArray(array);
    }
}